

import java.io.Serializable;
import java.util.Observable;
import java.util.TreeMap;


public class Article extends Observable implements Serializable {
	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************
    	private static final long serialVersionUID = 1L;


	// ************************************************************************************************************
	// Attributs
    // ************************************************************************************************************
    	
    private String _titre; 							//Titre de l'article
	private int _page;								//Page de l'article
	
	
	// Attributs d'Association
	
	private TreeMap<String, Auteur> _auteurs; 		//Liste des auteurs de l'article
    private TreeMap<String, MotsCles> _MotsCless;		//Liste des mots clés de l'article

    
    
    
	// ************************************************************************************************************
	// Constructeur
	// ************************************************************************************************************
    
	/**
	 * Constructeur.
	 */
    
    	public Article(String titre, int page, TreeMap<String, Auteur> auteurs, TreeMap<String, MotsCles> motsCles){
		this.settitre(titre);
		this.setpage(page);
		this.setAuteurs(auteurs);
        this.setMotsCless(motsCles);
	} // Fin Constructeur

	// ************************************************************************************************************
	// M�thodes priv�es
	// ************************************************************************************************************

	// ------------------------------------------------------------------------------------------------------------
	// Affecteurs

    	/**
    	 * Affectation du titre de l'article
    	 * @param editeur valeur � affecter � l'�diteur de l'ouvrage
    	 */
	private void settitre(String titre) {
		_titre = titre;
	}
		//
	/**
	 * Affectation de la page à l'objet
	 * @param editeur valeur � affecter � l'�diteur de l'ouvrage
	 */
	private void setpage(int page) {
		_page = page;
	}
		//
	/**
	 * Affectation de l'association à sa parution
	 * @param editeur valeur � affecter � l'�diteur de l'ouvrage
	 */



	// ************************************************************************************************************
	// M�thodes publiques
	// ************************************************************************************************************

	// ------------------------------------------------------------------------------------------------------------
	// 
	
	/**
	 * setter de la hashmap auteurs dans article
	 * @param auteurs Ensemble des auteurs à affecter à l'article
	 */ 
	public void setAuteurs(TreeMap<String, Auteur> auteurs) {
		_auteurs = auteurs;
	}
	/**
	 * setter de la hashmap motclés dans article
	 * @param motsclés Ensemble des motclés à affecter à l'article
	 */ 
    public void setMotsCless(TreeMap<String, MotsCles> MotsCless) {
    		_MotsCless = MotsCless;
    	}
    

	/**
	 * Retourne la page de l'article

	 */ 
	public int getpage() {
		return _page;
	}

	/**
	 * Retourne le titre de l'article
	 */ 
	public String getTitre() {
		return _titre;
	}

	/**
	 * Rajoute un auteur à la hashmap auteurs de l'article
	 * @param nom, prenom Clé de l'auteur
	 * @param auteur Objet auteur
	 */ 
    private void lierAuteur(String nom, String prenom, Auteur auteur) {
		String temps=nom+prenom;
		_auteurs.put(temps, auteur);
	} // Fin lierauteur

	/**
	 * Retourne l'objet auteur indexé par nom et prenom dans la hashmap auteurs de l'article
	 * @param nom, prenom     Clé de l'auteur
	 */   
    public Auteur getAuteur(String nom, String prenom) {
		String temp = nom+prenom;
		return (Auteur) _auteurs.get(temp);
	} // Fin unExemplaire

	/**
	 * Retourne l'objet motclé indexé par mot dans la hashmap motclés de l'article
	 * @param mot     Clé du mot
	 */   
    public MotsCles getMotsCles(String mot) {
		return (MotsCles) _MotsCless.get(mot);
	} // Fin unExemplaire
    
	/**
	 * Retourne un tableau d'auteurs issu du hashmap auteur de l'article
	 */   
    public TreeMap<String,Auteur> getAuteurs() {
		return _auteurs;
	}
	/**
	 * Retourne un tableau de mot clés issu du hashmap motclés de l'article
	 */    
    public TreeMap<String,MotsCles> getMotsCless() {
		return _MotsCless;
	}
    //
	/**
	 * Retourne le Nombre d'auteurs de la hashmap auteurs de l'article
	 */  
    public int getNbAuteur() {
		return _auteurs.size();
	}

	/**
	 * Retourne le Nombre de mot Clés de la hashmap mots clés de l'article
	 */ 
    public int getNbMotsCles() {
		return _MotsCless.size();
	}
    
	/**
	 * Retourne l'ISSN de la parution à laquelle appartient cet article
	 */ 


	/**
	 * Permet d'ajouter un nouvel auteu
	 * @param nom, prenom nom et prénom de l'auteur à rajouter
	 */ 
	public void ajouterAuteur(String nom, String prenom) {

		// Creation de l'auteur
		Auteur auteur = new Auteur(nom, prenom);

		// liaison de l'ouvrage a l'exemplaire
		this.lierAuteur(nom,prenom, auteur);

	} // Fin ajouterauteur


}
